topic "Utimate++ - politicky nekorektní platforma";
[2 $$0,0#00000000000000000000000000000000:Default]
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[t4167;C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[t4167;C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[b117;*+117 $$22,21#27457433418004101424360058862402:Caption]
[i128;*C@(28.42.150)2 $$23,23#90519220486603166734501227306500:code]
[{_}%CS-CZ 
[s0;= [*R6 U`+`+]&]
[s0;*R6 &]
[s0; [*R6 Úvod do U`+`+]&]
[s0;*R6 &]
[s0; [*R6 1. Utimate`+`+ `- politicky nekorektní platforma]&]
[s22; 1. Co je U`+`+&]
[s21; Pod nabubřelým názvem Ultimate`+`+ (který se většinou 
zkracuje na přijatelnější U`+`+) najdete cosi, co by se dalo 
stručně nazvat jako `"C`+`+ jinak`".&]
[s21; Jedná se o kompletní platformu pro vývoj aplikací, sestávající 
z knihovních modulů, metody modularizace těchto modulů a 
vývojového prostředí (`"TheIDE`") které této modularizace 
rozumí (zapomeňte na knihovní moduly .lib, .so a makefile 
soubory...).&]
[s21; Počátky U`+`+ se datují do doby přibližně před 9 lety. 
Důvodem vzniku bylo naše znechucení z existujících nástrojů 
a knihoven pro vývoj komerčních databázových client`-server 
SQL aplikací pod MS Windows a Oracle. Vývoj začal jako malá 
knihovna pro práci s Oracle pod MFC. Jak už to bývá, postupem 
času se rozrůstal tak jak bylo postupně potřeba řešit další 
a další problémy či jak nás napadala lepší a lepší řešení 
již existujících problémů.&]
[s21; Někdy kolem roku 2002 byly z kódu odstraněny poslední vazby 
na MFC a začaly práce na podporu X11 (a tedy Linuxu a FreeBSD). 
Od konce roku 2003 U`+`+ existuje jako open`-source projekt pod 
BSD licencí na www.sourceforge.net.&]
[s21; Ačkoliv je U`+`+ často chápán jako GUI knihovna, ve skutečnosti 
více či lépe pokrývá prakticky všechny úkoly na které 
lze použít `"kompilované`" jazyky. A tak vedle rozsáhlých 
desktopových aplikací, často pracujících s databázemi a 
grafikou, je U`+`+ požíváno třeba i pro www servery, například&]
[s21; http://www.wmap.cz/atlaszp&]
[s21; nebo pro ryzí utility typu ELF linker (rychlý `"uld`" linker, 
kterým je nahrazen ld.exe v U`+`+/mingw distribuci).&]
[s21; Mimochodem, ačkoliv je U`+`+ open`-source a `"zadarmo`", je 
pod BSD licencí a nic nebrání jeho komerčnímu použití. 
Naopak takové použití vítáme a vlastně celé U`+`+ je určeno 
tak trochu pro profesionální programátory stejné jako my, 
pro které je programování nejen zdrojem příjmů, ale i vásšní 
a zábavou (kterou ovšem ostatní platformy tak trochu kazí).&]
[s22; 2. Předkrm&]
[s21; Hlavním cílem U`+`+ je maximálně zjednodušit práci programátora, 
čehož se snažíme dosáhnout maximálním zjednodušením 
a zpřehledněním kódu. Zkusme si to pro začátek demonstrovat 
na jednoduchém příkladu:&]
[s21; GUI aplikace má za úkol zobrazit kolik dní se nachází mezi 
dvěma daty. Výsledek bude průběžně zobrazován po každé 
změně datumu:&]
[s0; &]
[s0;= 
@@image:2037&600
(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)
&]
[s0; &]
[s0; Vzhled okna aplikace je stvořen v `"layout designeru`" TheIDE:&]
[s0; &]
[s0;= 
@@image:2968&1537
(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)
&]
[s0;= &]
[s0; Kód aplikace:&]
[s0; &]
[s0;i128; [*C@(28.42.150) #include <CtrlLib/CtrlLib.h>]&]
[s0;i128;*C@(28.42.150) &]
[s23; #define LAYOUTFILE <Days/Days.lay>&]
[s0;i128; [*C@(28.42.150) #include <CtrlCore/lay.h>]&]
[s0;i128;*C@(28.42.150) &]
[s0;i128; [*C@(28.42.150) class Days : public WithDaysLayout<TopWindow> 
`{]&]
[s0;i128; [*C@(28.42.150) public:]&]
[s0;i128; [*C@(28.42.150) -|void Compute();]&]
[s0;i128;*C@(28.42.150) &]
[s0;i128; [*C@(28.42.150) -|typedef Days CLASSNAME;]&]
[s0;i128; [*C@(28.42.150) -|Days();]&]
[s0;i128; [*C@(28.42.150) `};]&]
[s0;i128;*C@(28.42.150) &]
[s0;i128; [*C@(28.42.150) void Days`::Compute()]&]
[s0;i128; [*C@(28.42.150) `{]&]
[s0;i128; [*C@(28.42.150) -|result `= IsNull(date1) `|`| IsNull(date2) 
? `"`" :]&]
[s0;i128; [*C@(28.42.150) -|         Format(`"There is %d day(s) between 
%`` and %```",]&]
[s0;i128; [*C@(28.42.150)                     abs(Date(`~date1) `- 
Date(`~date2)), `~date1, `~date2);]&]
[s0;i128; [*C@(28.42.150) `}]&]
[s0;i128;*C@(28.42.150) &]
[s0;i128; [*C@(28.42.150) Days`::Days()]&]
[s0;i128; [*C@(28.42.150) `{]&]
[s0;i128; [*C@(28.42.150) -|CtrlLayout(`*this, `"Days`");]&]
[s0;i128; [*C@(28.42.150) -|date1 <<`= THISBACK(Compute);]&]
[s0;i128; [*C@(28.42.150) -|date2 <<`= THISBACK(Compute);]&]
[s0;i128; [*C@(28.42.150) `}]&]
[s0;i128;*C@(28.42.150) &]
[s0;i128; [*C@(28.42.150) GUI`_APP`_MAIN]&]
[s0;i128; [*C@(28.42.150) `{]&]
[s0;i128; [*C@(28.42.150) -|Days().Run();]&]
[s0;i128; [*C@(28.42.150) `}]&]
[s0;i128;*C@(28.42.150) &]
[s22; 3. Trocha filozofie a politicky nekorektních názorů&]
[s21; Základní kritikou se kterou se ohledně U`+`+ setkáváme 
je fakt, že na první pohled se zdá, že U`+`+ `"znovuvynalézá 
kolo`" a implementuje vlastní třídy namísto těch které 
jsou k dispozici ve standardní C`+`+ knihovně.&]
[s21; Proč děláme takovou hloupost? Stručná, byť možná trochu 
nesrozumitelná odpověď na tuto otázku by se dala shrnout 
do věty: `"Protože STL vás nutí si přát, aby C`+`+ mělo 
automatickou správu paměti (garbage collector `- GC)`".&]
[s21; Problém je v tom, že do STL kontejneru můžete vkládat pouze 
objekty, které mají definovanou kopii. Navíc, pokud aspoň 
trochu dbáte na rychlost aplikace, musí tato kopie pokud možno 
být jednoduše proveditelná (rychlá).&]
[s21; To v praxi znamená že do STL kontejneru je možné efektivně 
ukládat fundamentální typy a možná tak řetězce a další 
jednoduché konkrétní typy. Všechno ostatní je možné uložit 
pouze nepřímo, pomocí ukazatele. Tím se ztrácí jedna ze 
základních výhod kterou používaní kontejnerových šablon 
přináší `- automatická správa paměti.&]
[s21; Mnohé C`+`+ knihovny (např. boost) a nakonec i nový C`+`+ 
standard se snaží řešit tento problém tzv. chytrých sdílených 
ukazatelů (boost`::shared`_ptr), které pomocí počítání 
odkazů na objekt ho uvolní ve chvíli, kdy zmizí poslední 
odkaz. Jedná se tedy o nedokonalou nápodobu automatické zprávy 
paměti (nedokonalou proto, že není uvolnit cyklické odkazů).&]
[s21; Náš názor je ten, že tento způsob řešení je zcela hloupý 
`- vnáší naprosto zbytečný zmatek do všech rozhraní (má 
funkce vracet chytrý ukazatel nebo normální?) i implementací 
a přitom zcela zbytečně plýtvá výkonem CPU `- ono to počítání 
referencí není zadarmo, zvláště když má program běžet 
ve vícevláknovém prostředí. Kromě toho se nepatřičně 
zamlžuje `"životnost objektu`", často není jasné kdy vlastně 
určitý objekt zaniká. Je tak obtížné používat destruktor 
k některým akcím ke kterým by logicky mohl a měl být použit 
(třeba zavírání GUI oken na obrazovce).&]
[s21; Shrnuto, v U`+`+ se snažíme dodržovat tyto zásady:&]
[s21;i150;O0; Správa paměti je implementační detail, na úrovni 
rozhraní nemá co dělat.&]
[s21;i150;O0; [* delete] je nízkoúrovňová operace, které by se 
měla používat co nejméně. Většina koncových aplikací 
v U`+`+ ho nepoužívá [*/ vůbec].&]
[s21;i150;O0; [* new] má legitimní použití pouze ve velice speciálních 
případech, většinou sovisejících s polymorfií.&]
[s21;i150;O0; Chytré sdílené ukazatele jsou to nejhorší co mohlo 
C`+`+ potkat.&]
[s22; 4. Všechno má své místo&]
[s21; Předpokládám že po přečtení předchozího odstavce většina 
zkušených C`+`+ programátoru musí začít kroutit hlavou 
a namítat jak že tedy je možné psát programy v U`+`+. Nuže:&]
[s21; Naprostá většina objektu v U`+`+ aplikaci je svázána s 
určitým blokem, přímo či nepřímo. Jinak řečeno, pro 
většinu objektu lze najít jednu konkretní `'`}`' která ukončuje 
jeho existenci.&]
[s21; Samozřejmě, často nelze určit kolik těch objektů v daném 
bloku má vzniknout, eventuálně jakého mají být odvozeného 
typu. A právě k řešení tohoto problému jsou zde U`+`+ kontejnery, 
jejichž podstatným rozdílem oproti těm standardním je že 
umožňují jednoduše ukládat objekty libovolného typu, bez 
požadavku na existenci `"kopírovací operace`".&]
[s21; Domníváme se, že striktní dodržování tohoto přístupu 
dělá z C`+`+ stejně efektivní či spíše efektivnější 
než jazyky používající automatickou správu paměti jako 
je Java nebo C#. Zatímco tyto jazyky jsou schopny se postarat 
o vaši pamět, U`+`+ se stará o [*/ všechny] použité zdroje 
a to velmi deterministickým způsobem.&]
[s21; Mimochodem, poznámka na okraj. Výše uvedené neznamená že 
v U`+`+ se nesmí používat ukazatele, pouze to že ukazatele 
se používají k [*/ ukazování] na objekty, ne jako reprezentaci 
objektu. Samotný objekt má být svázán s konkrétním blokem 
buď přímo nebo prostřednictvím kontejneru.&]
[s22; 5. U`+`+ kontejnery&]
[s21; V praxi je to trochu složitější, protože některé typy 
lze ukládat efektivněji `"přímo`" (tedy podobně jako v STL) 
a byla by škoda tuto možnost obětovat.&]
[s21; Z tohoto důvodu U`+`+ kontejnery vždy přicházejí ve dvojicích 
představujícími dva poddruhy.&]
[s21; Poddruh Vector nabízí velice efektivní způsob uložení 
[* hodnot] omezené množiny typů. Požadavky na ukládaný typ 
jsou zde ještě více omezující než ve standardní knihovně, 
především se vyžaduje aby byl tzv. Moveable, což ve stručnosti 
znamená, že nesmí obsahovat vnitřní odkazy na sama sebe. 
Na druhé straně, většina konkrétních typů v U`+`+ tento 
požadavek splňuje (ono ve skutečnosti, pokud víte o co se 
jedná, není to nijak těžké).&]
[s21; Na druhou stranu poddruh Array nemá na typ ukládaného objektu 
požadavky vůbec žádné. Dokonce dokáže ukládat objekty 
i typu odvozeného od toho, který je použit jako parametr šablony.&]
[s21; Díky tomu je v U`+`+ zcela normální například kontejner 
GUI elementů ([*C@(28.42.150) Array<EditInt> integer`_editors]) 
a třeba ho setřídit pomocí šablonové funkce [*C@(28.42.150) Sort]. 
Něco takového by ve standardní knihovně vyžadovalo použít 
kontejner ukazatelů ([*C@(28.42.150) std`::vector<EditInt `*>]) 
nebo případně nějakou formu chytrého sdíleného ukazatele, 
ale obojí jednak zvyšuje složitost kódu a druhé řešení 
je navíc méně efektivní z hlediska výkonu.&]
[s22; 6. Utržené kontejnery&]
[s21; Za jistých okolností je pro logiku programu výhodné umožnit 
přesun obsahu kontejneru na jiné místo, například z jednoho 
bloku do jiného. Výsledkem této operace je že cílový kontejner 
obsahuje stejné objekty jako zdroj, zatímco zdroj se nachází 
v `"utrženém`" stavu a nelze ho používat kromě několika 
málo definovaných operací (konkrétně smazání a přiřazení 
či utržení obsahu jiného kontejneru).&]
[s21; Poznamenejme, že utržení je implementačně značně nenáročná 
a rychlá operace.&]
[s21; Jelikož v praxi v naprosté většině případů je takové 
utržení přesně to co je potřeba, používá se pro tuto 
operaci běžný operátor přiřazení (operator`=), zatímco 
pro kopii obsahu se používá <<`=. To se může zdát poněkud 
matoucí a bývá to občas kritizováno jako možný zdroj chyb 
v programu. V praxi se s chybami vzniklými porušením `"trhací 
sémantiky`" setkáváme zřídka, zejména díky tomu že cílový 
kontejner se převádí do onoho `"utrženého`" stavu a jakákoliv 
práce s jeho obsahem vede u aplikace přeložené v ladicím 
módu k run`-time chybě.&]
[s22; 7. Příště&]
[s21; V tomto prvním článku u U`+`+ jsme si probrali ty nejkontroverznější 
aspekty U`+`+ a v příští části přehledu se podíváme 
jakým způsobem se filozofie U`+`+ projevuje při vývoji GUI 
aplikací.&]
[s0; ]]